/**
 * 响应拦截
 * @param {Object} http 
 */
module.exports = (vm) => {
  uni.$u.http.interceptors.response.use((response) => {
    // 特殊处理接口
    if (response.config && response.config.url) {
      // 鉴权接口处理 ***
      if (response.config.url.includes('/auth/wstoken') || response.config.url.includes('/auth/ythptwstoken')) {
        const data = response.data
        if (data) {
          if (data.success) {
            if (data.msgCode == '200') {
              let authValue = response.header['x-auth-token']
              if (authValue) {
                sessionStorage.setItem('x-auth-token', authValue)
              }
              // 测试
              //sessionStorage.setItem('x-auth-token', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZGVudGlmaWVyIjoiZG91aGFvIiwic3ViIjoiIiwiYXVkIjoiIiwiaG9zdCI6IjEyMy4yMzIuMTEzLjIyOSIsImlzcyI6IiIsInR5cGUiOiJQQVNTV09SRCIsImV4cCI6MTczNzQ0NzA4OSwiaWF0IjoxNzM3MzYwNjg5fQ.0z46hD2xLTEAO7eImUYUiY1bxkSLpQp_F_rIurVryus')
              return {
                code: '200',
                status: true
              }
            } else {
              return {
                code: '请求验证失败，请联系系统管理员',
                status: false
              }
            }
          } else {
            let message = ''
            switch (data.msgCode) {
              case '1004':
                message = '该应用您无权访问，请联系系统管理员';
                break;
              case '-401':
                message = '请求验证失败，请联系系统管理员';
                break;
              case '1221':
                message = '系统无法获取当前用户身份信息，请联系系统管理员';
                break;
              case '1003':
                message = '请求验证失败，请联系系统管理员';
                break;
              default:
                message = '请求验证失败，请联系系统管理员';
            }
            return {
              code: message,
              status: false
            }
          }
        }
      }
      // 验证码获取接口（无鉴权）
      if (response.config.url.includes('/auth/getCode')) {
        let uuid = ''
        if (response.header) {
          uuid = response.header['check-code-uuid']
        }
        let url = window.URL.createObjectURL(new Blob([response.data], {
          type: 'image/png'
        }))
        return {
          codeUrl: url,
          key: uuid
        }
      }
      // 排水户采集（无鉴权）
      if (response.config.url.includes('/drainage/collection/collect')) {
        const data = response.data
        if (data) {
          if (data.success) {
            return {
              code: data.msgCode,
              msg: '排水户填报成功'
            }
          } else {
            if (data.msgCode == '1075') {
              return {
                code: data.msgCode,
                msg: '验证码校验失败，请重新输入'
              }
            } else if (data.msgCode == '1073') {
              return {
                code: data.msgCode,
                msg: '验证码已失效，请点击图片刷新验证码后重新输入'
              }
            } else {
              return {
                code: data.msgCode,
                msg: data.msgDesc
              }
            }
          }
        }
      }
      // 新增巡检轨迹（鉴权）
      if (response.config.url.includes('/app/inspection/add')) {
        const data = response.data
        if (data) {
          if (data.success) {
            return {
              status: true,
              code: data.msgDesc
            }
          } else {
            return {
              status: false,
              code: '新增失败，请联系系统管理员'
            }
          }
        }
      }
      // 问题上报（无鉴权）
      if (response.config.url.includes('/app/problemreport/add')) {
        const data = response.data
        if (data) {
          if (data.success) {
            return {
              status: true,
              code: data.msgDesc
            }
          } else {
            return {
              status: false,
              code: '问题上报失败，请联系系统管理员'
            }
          }
        } else {
          return {
            status: false,
            code: '问题上报失败，请联系系统管理员'
          }
        }
      }

    }

    // 通用响应拦截器
    const result = response.data
    const custom = response.config?.custom
    let note = ''
    if (!result.success) {
      if (custom.toast !== false) {
        let message = '';
        switch (result.msgCode) {
          case '1004':
            note = '该应用您无权访问，请联系系统管理员';
            message = '';
            break;
          case '-401':
            message = '请求验证失败，请联系系统管理员';
            break;
          case '1221':
            note = '系统无法获取当前用户身份信息，请联系系统管理员';
            message = '';
            break;
          case '1003':
            message = '请求验证失败，请联系系统管理员';
            break;
          case '1225':
            message = '当前记录的整改状态不正确，请核对';
            break;
          case '1242':
            message = '该调度指令已反馈，暂不可重复反馈';
            break;
          default:
            message = result.msgDesc;
        }
        if (message != '') {
          uni.$u.toast(message);
        }
      }
      // 如果需要catch返回，则进行reject
      if (custom?.catch) {
        return Promise.reject(result)
      } else {
        return new Promise(() => {})
      }
    }

    if (response.config.fullPath.includes("/project/rectify/export")) {
      return {
        url: response.data.msgDesc
      }
    }
    if (response.config.fullPath.includes("/app/pipecheck/fh")) {
      return {
        msg: response.data.msgCode,
        msgId: response.data.msgDesc
      }
    }
    if (response.config.fullPath.includes("/patrol-log/add")) {
      return {
        msg: response.data.msgCode
      }
    }

    return result.data || {
      msgCode: result.msgCode
    } || {}
  }, (error) => {
    /*  对响应错误做点什么 （statusCode !== 200）*/
    uni.$u.toast('请求验证失败，请联系系统管理员');
    return Promise.reject(error)
  })
}